package kernel.stl.slicing.regiondetection;

import java.util.ArrayList;
import kernel.stl.LineSegmentList;
import kernel.stl.slicing.Slice;

/**
 *
 * @author George
 */
public class RegionList {
    
    private ArrayList list;
    
    /**Construtor da Lista de Regiões. 
     */    
    public RegionList() {
        list = new ArrayList();        
    }
    
    /**Remove uma região da lista, de acordo com o seu índice.
     * @param index índice da região a ser removida.
     */
    public void remove(int index) {
        list.remove(index);
    }
    
    /**Adiciona uma região à lista.
     * @param region região a ser adicionada.
     */
    public void addRegion(Region region) {
        list.add(region);
    }
    
    /**Retorna o número de regiões da lista.
     * @return número de regiões da lista.
     */
    public int getRegionCount() {
        return list.size();
    }

    /**Retorna uma região a partir do seu índice.
     * @param index índice da região a ser retornada.
     * @return região correspondente ao índice passado como parâmetro.
     */
    public Region getRegion(int index) {
        if (index < 0 || index >= this.getRegionCount())
            throw new IndexOutOfBoundsException();

        return (Region)list.get(index);
    }
    
    /**Gera uma fatia a partir da união de todas as regiões da lista.
     * @return fatia gerada.
     */
    public Slice toSlice() {  
        LineSegmentList list = new LineSegmentList();
        Slice slice = new Slice(list);
        for (int i = 0; i < this.getRegionCount(); i++)
            slice.incorporate(this.getRegion(i).toSlice(), 0);
        return slice;        
    }

    public void add(RegionList list) {
        for (int i = 0; i < list.getRegionCount(); i++) {
            this.addRegion(list.getRegion(i));
        }
    }
    
}
